#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys,os

def get_cfg(cfg):
	'''读取配置文件'''
	import ConfigParser
	config = ConfigParser.ConfigParser()
	#读取配置文件
	config.readfp(open(cfg))	
	for i in config.sections():
		bak(config.get(i, "s"),config.get(i, "o"),config.get(i, "z")=='1',config.get(i, "d")=='1',config.get(i, "t")=='1')

def copy(s,o):
	'''复制目录'''
	if not os.path.isdir(o):
		os.mkdir(o)
	if sys.platform=='win32':
		#判断操作系统
		os.system('xcopy /e %s %s'%(s,o))
	else:
		os.system('cp -r %s %s'%(s,o))

def zip(s,o):
	'''打包目录'''
	if sys.platform=='win32':
		#Windows没有合适的压缩命令
		print "Windows没有合适的压缩命令"
	else:
		os.system('tar cvpzf %s.tgz %s'%(o,s))

def date(o,l=0):
	'''创建当天日期目录'''
	import time
	if l==1:
		#仅日期
		s='%Y-%m-%d'
	elif l==2:
		#仅时间
		s='%H:%M:%S'
	else:
		#日期和时间
		s='%Y-%m-%d_%H:%M:%S'
	s=time.strftime(s,time.localtime())
	return os.path.join(o,s)

def help():
	print '''bak.py [-h -f -z -d -t] [配置文件] [源目录或文件 目标目录]

-h\t帮助信息
-f\t读取配置文件
-z\t备份压缩
-d\t根据日期生成备份文件或目录
-t\t根据时间生成备份文件或目录
\t-d -t都有则根据日期时间生成备份文件或目录

配置文件格式
[bak]
s=/tmp/a\t#源目录
o=/tmp/b\t#目标目录
z=1\t\t#压缩
d=1\t\t#日期
t=1\t\t#时间
'''
	sys.exit()
def bak(s,o,z=False,d=False,t=False):
	'''备份'''
	if d and t:
		o=date(o)
	elif d:
		o=date(o,1)
	elif t:
		o=date(o,2)
	if z:
		zip(s,o)
	else:
		copy(s,o)
if __name__ == '__main__':
	if len(sys.argv) < 2:
		#没有参数就调用默认备份配置文件
		get_cfg(".bak.cfg")
	else:
		#配置文件
		f=False
		#压缩
		z=False
		#原目录
		s=None
		#目标目录
		o=None
		#日期格式
		d=False
		#时间格式
		t=False
		for i in sys.argv[1:]:
			if i=='-h':
				#显示帮助
				help()
			elif i=='-f':
				#-f后跟随配置文件
				f=True
			elif f:
				get_cfg(i)
				sys.exit()
			elif i=='-z':
				z=True
			elif i=='-d':
				d=True
			elif i=='-t':
				t=True
			elif s==None:
				s=i
			elif o==None:
				o=i
		if s!=None and o!=None :
			bak(s,o,z,d,t)